CREATE SEQUENCE AUTO_IDCARGO INCREMENT BY 1 MINVALUE 10000001;

CREATE OR REPLACE PROCEDURE INSCRIBIR_ALUMNO(IDALUMNO$ IN NUMBER,IDNIVEL$ IN NUMBER,IDGRADO$ IN NUMBER,MENSUALIDADES_COLEGIATURA$ IN NUMBER)
AS 
	ANO_ACTUAL 			NUMBER(5);
	ANO_SIG 			NUMBER(5);
	CICLOESCOLAR$  		VARCHAR2(45);
	FECHAINSCRIPCION$ 	DATE;

	TYPE CURSOR_GENERA_CARGOS IS REF CURSOR;
	VCURSOR 			CURSOR_GENERA_CARGOS;
	IDNIVEL_C$ 			NUMBER(8);
	IDGRADO_C$ 			NUMBER(8);
	IDSERVICIO_C$ 		NUMBER(8);
	PRECIO_C$ 			NUMBER(12,2);
	TIPO_C$ 				VARCHAR(45);
	IDINSCRIPCION_C$ 		NUMBER(8);
	CICLOESCOLAR_C$ 		VARCHAR(20);
	FECHAINSCRIPCION_C$ 	DATE;
	IDALUMNO_C$ 			NUMBER(8);

	FECHAVEN$ 		DATE;
	FECHAPAGO$ 		DATE;
	FRACCION$ 		NUMBER(12,2);	
BEGIN	
		SELECT EXTRACT(YEAR FROM SYSDATE) INTO ANO_ACTUAL FROM DUAL;
		SELECT EXTRACT(YEAR FROM (SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL)) INTO ANO_SIG FROM DUAL;
		SELECT TO_DATE(SYSDATE,'DD/MM/YYYY') INTO FECHAINSCRIPCION$ FROM DUAL;
		CICLOESCOLAR$:=ANO_ACTUAL||'-'||ANO_SIG;
		INSERT INTO INSCRIPCION(IDINSCRIPCION,CICLOESCOLAR,FECHAINSCRIPCION,IDALUMNO,IDNIVEL,IDGRADO)
		VALUES(AUTO_IDINSCRIPCION.NEXTVAL,CICLOESCOLAR$,FECHAINSCRIPCION$,IDALUMNO$,IDNIVEL$,IDGRADO$);
		DBMS_OUTPUT.PUT_LINE('EL ALUMNO FUE INSCRITO');
		
		--GENERANDO CARGOS

		OPEN VCURSOR FOR
					SELECT IDNIVEL,IDGRADO,IDSERVICIO,PRECIO,TIPO,IDINSCRIPCION,CICLOESCOLAR,FECHAINSCRIPCION,IDALUMNO FROM NIVEL_GRADO NATURAL JOIN GRADO_SERVICIO NATURAL JOIN SERVICIO NATURAL JOIN INSCRIPCION 
					WHERE IDNIVEL=IDNIVEL$ AND IDGRADO=IDGRADO$ AND IDALUMNO=IDALUMNO$;
		
		LOOP
		
		FETCH VCURSOR INTO IDNIVEL_C$,IDGRADO_C$,IDSERVICIO_C$,PRECIO_C$,TIPO_C$,IDINSCRIPCION_C$,CICLOESCOLAR_C$,FECHAINSCRIPCION_C$,IDALUMNO_C$;
		EXIT WHEN VCURSOR%NOTFOUND;

		CASE IDSERVICIO_C$
						WHEN 10000001 THEN--COLEGIATURA
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											CASE MENSUALIDADES_COLEGIATURA$
												WHEN  1 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FECHAPAGO$:=SYSDATE+30;
															FECHAVEN$:=FECHAPAGO$+10;
															INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
															VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
												WHEN  2 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FRACCION$:=PRECIO_C$/2;
															FOR I IN 1..2 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,FRACCION$,2,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
															END LOOP;
												WHEN  3 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FRACCION$:=PRECIO_C$/3;
															FOR I IN 1..3 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,FRACCION$,3,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
															END LOOP;
												WHEN  6 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FRACCION$:=PRECIO_C$/6;
															FOR I IN 1..6 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,FRACCION$,6,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
															END LOOP;
												WHEN 10 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FRACCION$:=PRECIO_C$/10;
															FOR I IN 1..10 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,FRACCION$,10,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
															END LOOP;
												WHEN 12 THEN
															FECHAVEN$:=SYSDATE;
															FECHAPAGO$:=SYSDATE;
															FRACCION$:=PRECIO_C$/12;
															FOR I IN 1..12 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,FRACCION$,12,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);		
															END LOOP;
												ELSE DBMS_OUTPUT.PUT_LINE('VALOR DE MENSUALIDADES NO PERMITIDO, DEFAULT 1 ');
											END CASE;										
						
						WHEN 10000002 THEN--INSCRIPCION
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
						WHEN 10000003 THEN--MATERIAL ESCOLAR
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
						WHEN 10000004 THEN--UNIFORME
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
						WHEN 10000005 THEN--LIBROS
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
						WHEN 10000006 THEN--SEGURO MEDICO
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FECHAPAGO$:=SYSDATE+30;
											FECHAVEN$:=FECHAPAGO$+10;
											INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
											VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,1,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
						WHEN 10000007 THEN--TRANSPORTE
											FECHAVEN$:=SYSDATE;
											FECHAPAGO$:=SYSDATE;
											FOR I IN 1..12 LOOP	
																FECHAPAGO$:=SYSDATE+(30*I);
																FECHAVEN$:=FECHAPAGO$+10;
																INSERT INTO CARGO(IDCARGO,FECHACARGO,FECHAVEN,FECHAPAGO,IMPORTE,NUMERO_PAGOS,PAGO,ABONO,CVS,CARGO,IDINSCRIPCION,IDSERVICIO)
																VALUES(AUTO_IDCARGO.NEXTVAL,SYSDATE,FECHAVEN$,FECHAPAGO$,PRECIO_C$,12,0,0,NULL,NULL,IDINSCRIPCION_C$,IDSERVICIO_C$);	
															END LOOP;
		END CASE;
	
	END LOOP;

END INSCRIBIR_ALUMNO;
/

	